package com.roads.screen.mapper;

import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 可视化大屏4数据接口
 *
 * @author nhp
 * @date 2024-10-09
 */
public interface Screen4DataMapper {

    /**
     * 根据项目ID和用户查询标段或分部的工期集合-去重复
     * @param userName 用户
     * @param projectId 项目ID
     * @return 工期集合
     */
    List<String> selectBidPeriodsByUserAndProjectId(@Param("userName") String userName, @Param("projectId") Integer projectId);

    /**
     * 根据项目ID和用户查询标段或分部的工资日期集合年-月（去重复）
     * @param userName 用户
     * @param projectId 项目ID
     * @return 工资日期集合
     */
    List<String> selectSalaryDateByUserAndProjectId(@Param("userName") String userName, @Param("projectId") Integer projectId);

    /**
     * 获取劳务工在场用户数量
     * 如果userName为空，则获取该项目的所有劳务工在场数量
     * 如果userName不为空，则获取该项目下用户所分配的项目标段的
     * @param userName 用户
     * @param projectId 项目ID
     * @return 数量
     */
    int getLabourStaffPresenceCount(@Param("userName") String userName, @Param("projectId")  Integer projectId);

    /**
     * 获取劳务工本月进场数量
     * 如果userName为空，则获取该项目的所有劳务工在场数量
     * 如果userName不为空，则获取该项目下用户所分配的项目标段的
     * @param userName 用户
     * @param projectId 项目ID
     * @return 数量
     */
    int getLabourStaffEnterCount(@Param("userName") String userName, @Param("projectId")  Integer projectId);

    /**
     * 获取劳务工本月离场数量
     * 如果userName为空，则获取该项目的所有劳务工在场数量
     * 如果userName不为空，则获取该项目下用户所分配的项目标段的
     * @param userName 用户
     * @param projectId 项目ID
     * @return 数量
     */
    int getLabourStaffExitCount(@Param("userName") String userName, @Param("projectId")  Integer projectId);

    /**
     * 获取劳务工工种人数
     * 如果userName为空，则获取该项目的所有劳务工在场数量
     * 如果userName不为空，则获取该项目下用户所分配的项目标段的
     * @param userName 用户
     * @param projectId 项目ID
     * @return 工种数量
     */
    List<Map<String, Object>> getLabourStaffGroupPost(@Param("userName") String userName, @Param("projectId")  Integer projectId);

    /**
     * 根据日期获取劳务工工资总和
     * 如果userName为空，则获取该项目的所有劳务工在场数量
     * 如果userName不为空，则获取该项目下用户所分配的项目标段的
     *
     * @param userName 用户
     * @param projectId 项目ID
     * @param salaryDate 日期
     * @return 工资总和
     */
    BigDecimal getLabourStaffSalaryBySalaryDateAndUserAndProjectId(@Param("userName") String userName, @Param("projectId")  Integer projectId, @Param("salaryDate")  String salaryDate);

}
